From c48afeca8a7dcfdd397afbe1b11996af82cbaf9f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 17 Jul 2006 02:37:29 +0000 Subject: [PATCH] Put the code to protect against broken loaders that forget to set error in 2006-07-16 Matthias Clasen * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module) (gdk_pixbuf_loader_write, gdk_pixbuf_loader_close) (gdk_pixbuf_loader_ensure_error): Put the code to protect against broken loaders that forget to set error in an auxiliary function and call it in more places. (#346428, Catmur) --- gdk-pixbuf/ChangeLog | 7 ++++ gdk-pixbuf/gdk-pixbuf-loader.c | 64 +++++++++++++++++----------------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index a0624ad311..f6d8bb9c42 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,5 +1,12 @@ 2006-07-16 Matthias Clasen + * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module) + (gdk_pixbuf_loader_write, gdk_pixbuf_loader_close) + (gdk_pixbuf_loader_ensure_error): Put the code to protect + against broken loaders that forget to set error in an + auxiliary function and call it in more places. (#346428, + Catmur) + * io-xbm.c: Fix incremental loading of xbms. (#346427, Ed Catmur) Also make the xbm loader accept const variations. diff --git a/gdk-pixbuf/gdk-pixbuf-loader.c b/gdk-pixbuf/gdk-pixbuf-loader.c index 86702c91ee..b03f06e83e 100644 --- a/gdk-pixbuf/gdk-pixbuf-loader.c +++ b/gdk-pixbuf/gdk-pixbuf-loader.c @@ -303,6 +303,27 @@ gdk_pixbuf_loader_update (GdkPixbuf *pixbuf, MIN (height, gdk_pixbuf_animation_get_height (priv->animation))); } +/* Defense against broken loaders; DO NOT take this as a GError example! */ +static void +gdk_pixbuf_loader_ensure_error (GdkPixbufLoader *loader, + GError **error) +{ + GdkPixbufLoaderPrivate *priv = loader->priv; + + if (error == NULL || *error != NULL) + return; + + g_warning ("Bug! loader '%s' didn't set an error on failure", + priv->image_module->module_name); + g_set_error (error, + GDK_PIXBUF_ERROR, + GDK_PIXBUF_ERROR_FAILED, + _("Internal error: Image loader module '%s' failed to" + " complete an operation, but didn't give a reason for" + " the failure"), + priv->image_module->module_name); +} + static gint gdk_pixbuf_loader_load_module (GdkPixbufLoader *loader, const char *image_type, @@ -358,23 +379,7 @@ gdk_pixbuf_loader_load_module (GdkPixbufLoader *loader, if (priv->context == NULL) { - /* Defense against broken loaders; DO NOT take this as a GError - * example - */ - if (error && *error == NULL) - { - g_warning ("Bug! loader '%s' didn't set an error on failure", - priv->image_module->module_name); - g_set_error (error, - GDK_PIXBUF_ERROR, - GDK_PIXBUF_ERROR_FAILED, - _("Internal error: Image loader module '%s'" - " failed to begin loading an image, but didn't" - " give a reason for the failure"), - priv->image_module->module_name); - - } - + gdk_pixbuf_loader_ensure_error (loader, error); return 0; } @@ -450,7 +455,10 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader, eaten = gdk_pixbuf_loader_eat_header_write (loader, buf, count, error); if (eaten <= 0) - return FALSE; + { + gdk_pixbuf_loader_ensure_error (loader, error); + return FALSE; + } count -= eaten; buf += eaten; @@ -461,19 +469,8 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gboolean retval; retval = priv->image_module->load_increment (priv->context, buf, count, error); - if (!retval && error && *error == NULL) - { - /* Fix up busted image loader */ - g_warning ("Bug! loader '%s' didn't set an error on failure", - priv->image_module->module_name); - g_set_error (error, - GDK_PIXBUF_ERROR, - GDK_PIXBUF_ERROR_FAILED, - _("Internal error: Image loader module '%s'" - " failed to begin loading an image, but didn't" - " give a reason for the failure"), - priv->image_module->module_name); - } + if (!retval) + gdk_pixbuf_loader_ensure_error (loader, error); return retval; } @@ -716,7 +713,10 @@ gdk_pixbuf_loader_close (GdkPixbufLoader *loader, if (priv->image_module && priv->image_module->stop_load && priv->context) { if (!priv->image_module->stop_load (priv->context, error)) - retval = FALSE; + { + gdk_pixbuf_loader_ensure_error (loader, error); + retval = FALSE; + } } priv->closed = TRUE; -- 2.30.2